#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;
//class B;
//class A
//{
//public:
//	friend void C(const A& a, const B& b);
//
//protected:
//	int _a;
//};
//
//class B : public A
//{
//protected:
//	int _b;
//};
//
//void C(const A& a,const B& b)
//{
//	cout << a._a << endl;
//	cout << b._b << endl;
//}
//
//void test()
//{
//	A a;
//	B b;
//	C(a, b);
//}
//
//int main()
//{
//	test();
//	return 0;
//}

//class A 
//{
//protected:
//	int _a;
//public:
//	static int _d;
//};
//
//int A :: _d = 1;
//
//class B : public A
//{
//protected:
//	int _b;
//};
//
//int main()
//{
//	A a;
//	A::_d++;
//	B b;
//	B::_d++;
//	return 0;
//}


class A
{
public:
	int _a;
};

class B : virtual public A
{
public:
	int _b;
};

class C : virtual public A
{
public:
	int _c;
};

class D : public B, public C
{
public:
	int _d;
};

int main()
{
	D d;
	d.B::_a = 1;
	d.C::_a = 2;
	d._b = 3;
	d._c = 4;
	d._d = 5;
	return 0;
}